package com.linzm.leetcode.primary.exercises1_20230114;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @Author zimingl
 * @Date 2023/1/12 22:32
 * @Description: 重新格式化电话号码
 *给你一个字符串形式的电话号码 number 。number 由数字、空格 ' '、和破折号 '-' 组成。
 * 请你按下述方式重新格式化电话号码。
 * 首先，删除 所有的空格和破折号。
 * 其次，将数组从左到右 每 3 个一组 分块，直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块：
 * 2 个数字：单个含 2 个数字的块。
 * 3 个数字：单个含 3 个数字的块。
 * 4 个数字：两个分别含 2 个数字的块。
 * 最后用破折号将这些块连接起来。注意，重新格式化过程中 不应该 生成仅含 1 个数字的块，并且 最多 生成两个含 2 个数字的块。
 * 返回格式化后的电话号码.
 * 输入：number = "123 4-567"
 * 输出："123-45-67"
 * 解释：数字是 "1234567".
 * 步骤 1：共有超过 4 个数字，所以先取 3 个数字分为一组。第 1 个块是 "123" 。
 * 步骤 2：剩下 4 个数字，所以将它们分成两个含 2 个数字的块。这 2 块分别是 "45" 和 "67" 。
 * 连接这些块后得到 "123-45-67" .
 *
 * 做法 StringBuilder、 Deque<String> dequeQueue
 */
public class Demo2_1694 {

    public static void main(String[] args) {
        String number ="--17-5 229 35-39475 ";
        String resStr = new Demo2_1694().reformatNumber(number);
        System.out.println(resStr);
    }

    public String reformatNumber(String number) {
        StringBuilder stringbuilder = new StringBuilder();
        Deque<String> dequeQueue = new LinkedList<>();
        int count = Math.min(number.length(), 3);
        String tmpStr = "";
        for (int i = 0; i < number.length(); i++) {
            if (!" ".equals(""+number.charAt(i)) && !"-".equals(""+number.charAt(i))) {
                stringbuilder.append(number.charAt(i));
            }
        }
        for (int i = 0; i < stringbuilder.length(); i++) {
            String strBul = stringbuilder.toString();
            tmpStr = tmpStr+""+strBul.charAt(i);
            count--;
            if (count == 0) {
                dequeQueue.push(tmpStr);
                tmpStr = "";
                count = Math.min(stringbuilder.length() - i - 1, 3);
            }
        }
        if (dequeQueue.peek().length() == 1) {
            String unit1 = dequeQueue.pop();
            String unit2 = dequeQueue.pop();
            String str = unit2 + unit1;
            dequeQueue.push(str.substring(0, 2));
            dequeQueue.push(str.substring(2));
        }
        String resStr = "";
        while (!dequeQueue.isEmpty()) {
            resStr = "-" + dequeQueue.pop() + resStr;
        }
        return resStr.substring(1);
    }
}
